package com.example.xml;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class XmlUtil {
    Person person;
    public  static List<Person> paramList(InputStream is) throws XmlPullParserException, IOException {
        Person person=null;
        // 获取pull解析器
       XmlPullParser parser= XmlPullParserFactory.newInstance().newPullParser();
       List<Person> list=null;
//       加入数据流
       parser.setInput(is,"UTF-8");
//       首次获取时event始终为 XmlPullParser.START_DOCUMENT
     int event=  parser.getEventType();
//     文档结束时结束循环
       while (event!=XmlPullParser.END_DOCUMENT){
           switch (event){
//               文档开始时创建列表
               case XmlPullParser.START_DOCUMENT:
                   list=new ArrayList<>();
                   break;
//                   标签开始
               case XmlPullParser.START_TAG:
//                   获取标签名
                   switch (parser.getName()){
                       case "person":
                           person =new Person();
//                           PULL解析获取属性时，会按照xml顺序获取属性
                           person.setId(parser.getAttributeValue(0));

                         break;
                       case "name":
                           if (null!=person) {
                               person.setName(parser.nextText());
                           }
                               break;

                       case "age":
                           if (null!=person) {
                               person.setAge(parser.nextText());
                           }
                               break;


                   }
                   break;
               case XmlPullParser.END_TAG:
                   if ("person".equals(parser.getName())){
                       list.add(person);
                       person=null;
                   }
                   break;
           }
           //轮动解析，如果while循环最后没有修改event，会死循环
           event=parser.next();
       }
       return list;
    }
}
